<?php

/**
 * \file
 * Démonstration de l'utilisation des classes configurables.
 *
 * \todo Rendre indépendant de Toguna.
 *
 * \since 09/03/2009
 * \author Matthieu OVIEDO <matthieu.oviedo@gmail.com> 
 */


// Inclusion du noyau de pilar et connection à une base de données :
 include('../../../toguna.config.php');
 include(DOCUMENT_ROOT.'/inc/hInit.inc.php');

// Définition d'une classe mère :
 class A extends \pilar\Configurables\Configurable {

  protected function _configure() {
   parent::_configure();

   $this->defineParams(array(
    'foo' => 'toto',
    'bar' => 'tata'
   ));
  }

 }


// Définition d'une classe fille :
 class B extends A {

  protected function _configure() {
   parent::_configure(); // Important !

   $this->setParams(array(
    'foo' => 'tatetitotu'
   ));

   $this->defineParams(array(
    'n42' => null
   ));
  }


  protected function _reconfigure() {
   if ($this->param('n42') == null) {
    $this->setParams(array(
     'n42' => $this->param('foo')
    ));
   }

   /* INTERDIT DE DÉFINIR DES NOUVEAUX PARAMETRES ICI !
    $this->defineParams(array(
     'auto' => 'moto'
    ));
   */

   parent::_reconfigure(); // Important, récursion terminale !
  }

 }


// Tests :
 $a = new A(array(
  'foo' => 12
 ));
 echo $a->param('foo'); // -> 12
 echo '<br />';
 echo $a->param('bar'); // -> tata
 /*
  echo $a->param('n42'); // -> ERREUR, PARAMETRE INEXISTANT DANS A !
 */
 echo '<br />';
 echo '<br />';

 $b1 = new B(array(
  'bar' => 'hiha !',
  'foo' => 42
 ));
 echo $b1->param('foo'); // -> 42
 echo '<br />';
 echo $b1->param('bar'); // -> hiha !
 echo '<br />';
 echo $b1->param('n42'); // -> 42
 echo '<br />';
 echo '<br />';

 $b2 = new B(array(
  'n42' => 7
 ));
 echo $b2->param('foo'); // -> tatetitotu
 echo '<br />';
 echo $b2->param('bar'); // -> tata
 echo '<br />';
 echo $b2->param('n42'); // -> 7
 echo '<br />';
 echo '<br />';


// Affichage de la trace :
 $TRACE->display();

?>
